请从实验的网站下载 \texttt{Labsetup.zip} 文件到你的 VM 中，解压它，
进入 \texttt{Labsetup} 文件夹，然后用 \texttt{docker-compose.yml} 文件安装实验环境。
对这个文件及其包含的所有 \texttt{Dockerfile} 文件中的内容的详细解释都可以
在链接到本实验网站的用户手册 \footnote{
    如果你在部署容器的过程中发现从官方源下载容器镜像非常慢，
    可以参考手册中的说明使用当地的镜像服务器
} 中找到。
如果这是您第一次使用容器设置 SEED 实验环境，那么阅读用户手册非常重要。

在下面，我们列出了一些与 Docker 和 Compose 相关的常用命令。
由于我们将非常频繁地使用这些命令，因此我们在 \texttt{.bashrc} 文件
（在我们提供的 SEED Ubuntu 20.04 虚拟机中）中为它们创建了别名。


\begin{lstlisting}
$ docker-compose build  # 建立容器镜像
$ docker-compose up     # 启动容器
$ docker-compose down   # 关闭容器

// 上述 Compose 命令的别名
$ dcbuild       # docker-compose build 的别名
$ dcup          # docker-compose up 的别名
$ dcdown        # docker-compose down 的别名
\end{lstlisting}


所有容器都在后台运行。
要在容器上运行命令，我们通常需要获得容器里的 Shell 。
首先需要使用 \texttt{docker ps} 命令找出容器的 ID ，
然后使用 \texttt{docker exec} 在该容器上启动 Shell 。
我们已经在 \texttt{.bashrc} 文件中为这两个命令创建了别名。

\begin{lstlisting}
$ dockps        // docker ps --format "{{.ID}}  {{.Names}}" 的别名
$ docksh <id>   // docker exec -it <id> /bin/bash 的别名

// 下面的例子展示了如何在主机 C 内部得到 Shell
$ dockps
b1004832e275  hostA-10.9.0.5
0af4ea7a3e2e  hostB-10.9.0.6
9652715c8e0a  hostC-10.9.0.7

$ docksh 96
root@9652715c8e0a:/#

// 注: 如果一条 docker 命令需要容器 ID，你不需要
//     输入整个 ID 字符串。只要它们在所有容器当中
//     是独一无二的，那只输入前几个字符就足够了。
\end{lstlisting}


如果你在设置实验环境时遇到问题，可以尝试从手册的``Miscellaneous Problems''部分中寻找解决方案。
